home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / distutils / emxccompiler.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  8KB  |  211 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. '''distutils.emxccompiler
  5.  
  6. Provides the EMXCCompiler class, a subclass of UnixCCompiler that
  7. handles the EMX port of the GNU C compiler to OS/2.
  8. '''
  9. __revision__ = '$Id: emxccompiler.py,v 1.11 2003/12/02 12:17:59 aimacintyre Exp $'
  10. import os
  11. import sys
  12. import copy
  13. from distutils.ccompiler import gen_preprocess_options, gen_lib_options
  14. from distutils.unixccompiler import UnixCCompiler
  15. from distutils.file_util import write_file
  16. from distutils.errors import DistutilsExecError, CompileError, UnknownFileError
  17. from distutils import log
  18.  
  19. class EMXCCompiler(UnixCCompiler):
  20.     compiler_type = 'emx'
  21.     obj_extension = '.obj'
  22.     static_lib_extension = '.lib'
  23.     shared_lib_extension = '.dll'
  24.     static_lib_format = '%s%s'
  25.     shared_lib_format = '%s%s'
  26.     res_extension = '.res'
  27.     exe_extension = '.exe'
  28.     
  29.     def __init__(self, verbose = 0, dry_run = 0, force = 0):
  30.         UnixCCompiler.__init__(self, verbose, dry_run, force)
  31.         (status, details) = check_config_h()
  32.         self.debug_print("Python's GCC status: %s (details: %s)" % (status, details))
  33.         if status is not CONFIG_H_OK:
  34.             self.warn("Python's pyconfig.h doesn't seem to support your compiler.  " + 'Reason: %s.' % details + 'Compiling may fail because of undefined preprocessor macros.')
  35.         
  36.         (self.gcc_version, self.ld_version) = get_versions()
  37.         self.debug_print(self.compiler_type + ': gcc %s, ld %s\n' % (self.gcc_version, self.ld_version))
  38.         self.set_executables(compiler = 'gcc -Zomf -Zmt -O3 -fomit-frame-pointer -mprobe -Wall', compiler_so = 'gcc -Zomf -Zmt -O3 -fomit-frame-pointer -mprobe -Wall', linker_exe = 'gcc -Zomf -Zmt -Zcrtdll', linker_so = 'gcc -Zomf -Zmt -Zcrtdll -Zdll')
  39.         self.dll_libraries = [
  40.             'gcc']
  41.  
  42.     
  43.     def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts):
  44.         if ext == '.rc':
  45.             
  46.             try:
  47.                 self.spawn([
  48.                     'rc',
  49.                     '-r',
  50.                     src])
  51.             except DistutilsExecError:
  52.                 msg = None
  53.                 raise CompileError, msg
  54.             except:
  55.                 None<EXCEPTION MATCH>DistutilsExecError
  56.             
  57.  
  58.         None<EXCEPTION MATCH>DistutilsExecError
  59.         
  60.         try:
  61.             self.spawn(self.compiler_so + cc_args + [
  62.                 src,
  63.                 '-o',
  64.                 obj] + extra_postargs)
  65.         except DistutilsExecError:
  66.             msg = None
  67.             raise CompileError, msg
  68.  
  69.  
  70.     
  71.     def link(self, target_desc, objects, output_filename, output_dir = None, libraries = None, library_dirs = None, runtime_library_dirs = None, export_symbols = None, debug = 0, extra_preargs = None, extra_postargs = None, build_temp = None, target_lang = None):
  72.         if not extra_preargs:
  73.             pass
  74.         extra_preargs = copy.copy([])
  75.         if not libraries:
  76.             pass
  77.         libraries = copy.copy([])
  78.         if not objects:
  79.             pass
  80.         objects = copy.copy([])
  81.         libraries.extend(self.dll_libraries)
  82.         if export_symbols is not None and target_desc != self.EXECUTABLE:
  83.             temp_dir = os.path.dirname(objects[0])
  84.             (dll_name, dll_extension) = os.path.splitext(os.path.basename(output_filename))
  85.             def_file = os.path.join(temp_dir, dll_name + '.def')
  86.             contents = [
  87.                 'LIBRARY %s INITINSTANCE TERMINSTANCE' % os.path.splitext(os.path.basename(output_filename))[0],
  88.                 'DATA MULTIPLE NONSHARED',
  89.                 'EXPORTS']
  90.             for sym in export_symbols:
  91.                 contents.append('  "%s"' % sym)
  92.             
  93.             self.execute(write_file, (def_file, contents), 'writing %s' % def_file)
  94.             objects.append(def_file)
  95.         
  96.         if not debug:
  97.             extra_preargs.append('-s')
  98.         
  99.         UnixCCompiler.link(self, target_desc, objects, output_filename, output_dir, libraries, library_dirs, runtime_library_dirs, None, debug, extra_preargs, extra_postargs, build_temp, target_lang)
  100.  
  101.     
  102.     def object_filenames(self, source_filenames, strip_dir = 0, output_dir = ''):
  103.         if output_dir is None:
  104.             output_dir = ''
  105.         
  106.         obj_names = []
  107.         for src_name in source_filenames:
  108.             (base, ext) = os.path.splitext(os.path.normcase(src_name))
  109.             if ext not in self.src_extensions + [
  110.                 '.rc']:
  111.                 raise UnknownFileError, "unknown file type '%s' (from '%s')" % (ext, src_name)
  112.             
  113.             if strip_dir:
  114.                 base = os.path.basename(base)
  115.             
  116.             if ext == '.rc':
  117.                 obj_names.append(os.path.join(output_dir, base + self.res_extension))
  118.                 continue
  119.             obj_names.append(os.path.join(output_dir, base + self.obj_extension))
  120.         
  121.         return obj_names
  122.  
  123.     
  124.     def find_library_file(self, dirs, lib, debug = 0):
  125.         shortlib = '%s.lib' % lib
  126.         longlib = 'lib%s.lib' % lib
  127.         
  128.         try:
  129.             emx_dirs = os.environ['LIBRARY_PATH'].split(';')
  130.         except KeyError:
  131.             emx_dirs = []
  132.  
  133.         for dir in dirs + emx_dirs:
  134.             shortlibp = os.path.join(dir, shortlib)
  135.             longlibp = os.path.join(dir, longlib)
  136.             if os.path.exists(shortlibp):
  137.                 return shortlibp
  138.                 continue
  139.             if os.path.exists(longlibp):
  140.                 return longlibp
  141.                 continue
  142.         
  143.  
  144.  
  145. CONFIG_H_OK = 'ok'
  146. CONFIG_H_NOTOK = 'not ok'
  147. CONFIG_H_UNCERTAIN = 'uncertain'
  148.  
  149. def check_config_h():
  150.     '''Check if the current Python installation (specifically, pyconfig.h)
  151.     appears amenable to building extensions with GCC.  Returns a tuple
  152.     (status, details), where \'status\' is one of the following constants:
  153.       CONFIG_H_OK
  154.         all is well, go ahead and compile
  155.       CONFIG_H_NOTOK
  156.         doesn\'t look good
  157.       CONFIG_H_UNCERTAIN
  158.         not sure -- unable to read pyconfig.h
  159.     \'details\' is a human-readable string explaining the situation.
  160.  
  161.     Note there are two ways to conclude "OK": either \'sys.version\' contains
  162.     the string "GCC" (implying that this Python was built with GCC), or the
  163.     installed "pyconfig.h" contains the string "__GNUC__".
  164.     '''
  165.     sysconfig = sysconfig
  166.     import distutils
  167.     import string as string
  168.     if string.find(sys.version, 'GCC') >= 0:
  169.         return (CONFIG_H_OK, "sys.version mentions 'GCC'")
  170.     
  171.     fn = sysconfig.get_config_h_filename()
  172.     
  173.     try:
  174.         f = open(fn)
  175.         s = f.read()
  176.         f.close()
  177.     except IOError:
  178.         exc = None
  179.         return (CONFIG_H_UNCERTAIN, "couldn't read '%s': %s" % (fn, exc.strerror))
  180.  
  181.     if string.find(s, '__GNUC__') >= 0:
  182.         return (CONFIG_H_OK, "'%s' mentions '__GNUC__'" % fn)
  183.     else:
  184.         return (CONFIG_H_NOTOK, "'%s' does not mention '__GNUC__'" % fn)
  185.  
  186.  
  187. def get_versions():
  188.     ''' Try to find out the versions of gcc and ld.
  189.         If not possible it returns None for it.
  190.     '''
  191.     StrictVersion = StrictVersion
  192.     import distutils.version
  193.     find_executable = find_executable
  194.     import distutils.spawn
  195.     import re as re
  196.     gcc_exe = find_executable('gcc')
  197.     if gcc_exe:
  198.         out = os.popen(gcc_exe + ' -dumpversion', 'r')
  199.         out_string = out.read()
  200.         out.close()
  201.         result = re.search('(\\d+\\.\\d+\\.\\d+)', out_string)
  202.         if result:
  203.             gcc_version = StrictVersion(result.group(1))
  204.         else:
  205.             gcc_version = None
  206.     else:
  207.         gcc_version = None
  208.     ld_version = None
  209.     return (gcc_version, ld_version)
  210.  
  211.